package com.lh.tams.dao.system;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.lh.tams.controller.qo.PersonQo;
import com.lh.tams.dao.base.HibernateBaseDao;
import com.lh.tams.domain.TamsPerson;
import com.lh.tams.util.DataGridModel;
import com.lh.tams.util.Page;
import com.lh.tams.util.Status;

/**
 * 警员管理DAO
 * @author liulin
 * @version 2012-05-19
 */
@Repository
public class PersonDao extends HibernateBaseDao{
	
	/**
	 * 根据部门查询警员
	 * @param dgm
	 * @param deptId
	 * @return
	 */
	public Page query(DataGridModel dgm,long deptId){
		List<Object> args=new ArrayList<Object>();
		StringBuilder hql=new StringBuilder();
		hql.append("from TamsPerson tp where tp.tamsDept.idBgt=? and tp.tamsRole.status=?");
		args.add(deptId);
		args.add(Status.STATUS_NORMAL);
		return super.queryForList(hql.toString(), args.toArray(), dgm.getPage(), dgm.getRows());
	}

	/**
	 * 根据角色查询警员
	 * @param dgm
	 * @param deptId
	 * @return
	 */
	public Page queryPersonByRole(DataGridModel dgm, int role){
		List<Object> args=new ArrayList<Object>();
		StringBuilder hql=new StringBuilder();
		hql.append("from TamsPerson tp where tp.tamsRole.roleType=? and tp.tamsRole.status=? and tp.status=?");
		args.add(role);
		args.add(Status.STATUS_NORMAL);
		args.add(Status.STATUS_NORMAL);
		return super.queryForList(hql.toString(), args.toArray(), dgm.getPage(), dgm.getRows());
	}
	
	public Page query(DataGridModel dgm,PersonQo personQo){
		List<Object> args=new ArrayList<Object>();
		StringBuilder hql=new StringBuilder();
		hql.append("select tp from TamsPerson tp left join tp.tamsDept td");
		hql.append(" left join tp.tamsRole tr where tp.status=?  and tp.personUsername!=?");
		args.add(Status.STATUS_NORMAL);
		args.add("admin");
		//System.out.println("---"+personQo.getPersonName()+" "+personQo.getDeptId()+" "+personQo.getRoleId());
		if(personQo.getPersonName()!=null&&!"".equals(personQo.getPersonName())){
			hql.append(" and tp.personName like ?");
			args.add("%"+personQo.getPersonName()+"%");
		}
		if(personQo.getPersonUsername()!=null&&!"".equals(personQo.getPersonUsername())){
			hql.append(" and tp.personUsername like ?");
			args.add("%"+personQo.getPersonUsername()+"%");
		}
		if(personQo.getDeptId()>0){
			hql.append(" and td.idBgt=?");
			args.add(personQo.getDeptId());
		}
		if(personQo.getRoleId()>0){
			hql.append(" and tr.idBgt=?");
			args.add(personQo.getRoleId());
		}
		return super.queryForList(hql.toString(), args.toArray(), dgm.getPage(), dgm.getRows());
	}
	
	public TamsPerson query(String personUsername,String personPassword){
		String hql="from TamsPerson t where t.personUsername=? and t.personPassword=?";
		List<TamsPerson> list= getHibernateTemplate().find(hql, new Object[]{personUsername,personPassword});
		if(list.size()>0)
			return list.get(0);
		return null;
	}
	
	public TamsPerson query(String userName){
		String hql="from TamsPerson t where t.personUsername=?";
		List<TamsPerson> list= getHibernateTemplate().find(hql, new Object[]{userName});
		if(list.size()>0)
			return list.get(0);
		return null;
	}
	
	public boolean query(String personUsername,long id){
		String hql="from TamsPerson t where t.personUsername=? and t.idBgt!=?";
		List<TamsPerson> list= getHibernateTemplate().find(hql, new Object[]{personUsername,id});
		if(list.size()>0)
			return true;
		return false;
	}
	
	public TamsPerson getPersonById(long id){
		return getHibernateTemplate().get(TamsPerson.class, id);
	}
	
	/**
	 * 新增警员
	 * @param tamsPerson
	 */
	public void add(TamsPerson tamsPerson){
		super.add(tamsPerson);
	}
	
	/**
	 * 修改警员
	 * @param tamsPerson
	 */
	public void update(TamsPerson tamsPerson){
		super.update(tamsPerson);
	}
	
	/**
	 * 批量删除
	 * @param ids
	 */
	public void delete(long[] ids){
		super.delete("TAMS_PERSON", ids);
	}
}
